package business.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import business.BusinessDAO;
import business.BusinnessCRUD;
import business.model.EstoqueTO;
import exception.BusinessException;
import exception.InterfaceException;
import exception.UsuarioException;

public class EstoqueDAO extends BusinessDAO implements BusinnessCRUD<EstoqueTO> {

	public EstoqueTO consultar(EstoqueTO o) throws UsuarioException,
			BusinessException, InterfaceException {
		// TODO Auto-generated method stub
		Statement st;
		EstoqueTO estoque = new EstoqueTO();
		try {
			st = getConector().getConnection().createStatement(
					ResultSet.TYPE_SCROLL_INSENSITIVE,
					ResultSet.CONCUR_UPDATABLE);
			ResultSet rs = st
					.executeQuery("Select * FROM estoque WHERE produto='"
							+ o.getProduto() + "'");
			if (rs.next()) {
				estoque.setQuantidade(rs.getInt("quantidade"));
				estoque.setValorUnitario(rs.getDouble("valorUnitario"));
				estoque.setValorTotal(rs.getDouble("valorTotal"));
				estoque.setDataValidade(rs.getDate("dataValidade"));
			}

			return estoque;
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return estoque;
	}

	@Override
	public List<EstoqueTO> listar(EstoqueTO o) throws UsuarioException,
			BusinessException, InterfaceException {
		// TODO Auto-generated method stub
		Statement st;
		List<EstoqueTO> clientes = new ArrayList<EstoqueTO>();
		try {
			st = getConector().getConnection().createStatement(
					ResultSet.TYPE_SCROLL_INSENSITIVE,
					ResultSet.CONCUR_UPDATABLE);
			ResultSet rs = st.executeQuery("Select * FROM estoque");

			while (rs.next()) {
				clientes.add(new EstoqueTO(rs));
			}

			return clientes;
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return clientes;

	}

	@Override
	public boolean incluir(EstoqueTO o) throws UsuarioException,
			BusinessException, InterfaceException {
		try {
			Statement st = getConector().getConnection().createStatement(
					ResultSet.TYPE_SCROLL_INSENSITIVE,
					ResultSet.CONCUR_UPDATABLE);
			Integer rs = st
					.executeUpdate("INSERT INTO estoque (produto, quantidade, valorUnitario, valorTotal, dataValidade)"
							+ "VALUES"
							+ "('"
							+ o.getProduto()
							+ "', '"
							+ o.getQuantidade()
							+ "', '"
							+ o.getValorUnitario()
							+ "', '"
							+ o.getValorTotal()
							+ "', '"
							+ o.getDataValidade() + "')");
			if (rs == 0) {
				return true;
			} else {
				return false;
			}
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println(e.getMessage());
			return false;
		}

	}

	@Override
	public boolean alterar(EstoqueTO o) throws UsuarioException,
			BusinessException, InterfaceException {
		Statement st;
		try {
			st = getConector().getConnection().createStatement(
					ResultSet.TYPE_SCROLL_INSENSITIVE,
					ResultSet.CONCUR_UPDATABLE);
			Integer rs = st.executeUpdate("UPDATE estoque SET produto = '"
					+ o.getProduto() + "', " + "quatidade = '"
					+ o.getQuantidade() + "', valorUnitario = '"
					+ o.getValorUnitario() + "', valorTotal = '"
					+ o.getValorTotal() + "', dataValidade = '"
					+ o.getDataValidade() + "'" + "WHERE" + " produto = "
					+ o.getProduto());
			if (rs == 0) {
				return true;
			} else {
				return false;
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return false;
	}

	@Override
	public boolean excluir(EstoqueTO o) throws UsuarioException,
			BusinessException, InterfaceException {
		// TODO Auto-generated method stub
		Statement st;
		Integer rs = Integer.MAX_VALUE;
		try {
			st = getConector().getConnection().createStatement(
					ResultSet.TYPE_SCROLL_INSENSITIVE,
					ResultSet.CONCUR_UPDATABLE);
			rs = st.executeUpdate("DELETE FROM pizzaria.estoque WHERE produto = '"
					+ o.getProduto() + "'");
		} catch (ClassNotFoundException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		if (rs == 0) {
			return true;
		} else {
			return false;
		}
	}
}